package config

import (
	"context"
	"fmt"
	"github.com/qiniu/qmgo" // 替换官方驱动为 QMGO
	"github.com/sirupsen/logrus"
	"log"
	"net/url"
	"sync"
)

var db *qmgo.Database // 数据库类型改为 QMGO 的 Database
var once0 sync.Once   // 确保初始化只执行一次的同步工具

func InitMongoDB(props *DatabaseProperties) {
	once0.Do(func() {
		username := url.QueryEscape(props.Username)
		password := url.QueryEscape(props.Password)

		var url = fmt.Sprintf("mongodb://%s:%s@%s:27017/%s", username, password, props.Host, props.DbName)
		// 使用 QMGO 配置客户端
		client, err := qmgo.NewClient(context.Background(), &qmgo.Config{
			Uri: url, // 传入包含认证信息的完整连接串
		})
		if err != nil {
			log.Fatalf("failed to create qmgo client: %v", err)
		}
		db = client.Database(props.DbName)
		logrus.Infof("database[%s] 连接成功...", props.DbName)
	})
}

// 返回 QMGO 数据库实例（供上层仓库使用）
func GetDataBase() *qmgo.Database {
	if db == nil {
		panic("数据库未初始化")
	}
	return db
}
